import { Context, Next } from 'koa';

/**
 * 错误处理中间件
 * 捕获应用中的所有错误，并返回统一的错误响应格式
 * @param ctx 
 * @param next 
 * @throws {ErrorHandler} 自定义错误处理类 
 */
export default async function errorMiddleware(ctx: Context, next: Next) {
    try {
        await next();
    } catch (err: ErrorHandler | any) {
        ctx.status = err.status || 500;
        ctx.body = {
            code: ctx.status,
            message: err.message || 'Internal server error'
        };
    }
}

/**
 * 自定义错误处理类
 * 用于抛出特定的错误信息和状态码
 */
export class ErrorHandler extends Error {
    status: number;

    constructor(message: string, status: number = 500) {
        super(message);
        this.status = status;
        this.name = 'ErrorHandler';
    }
}
